package cn.zhuama.org.service.impl;

import cn.zhuama.basic.exception.BusinessException;
import cn.zhuama.basic.sevice.impl.BaseServiceImpl;
import cn.zhuama.basic.util.AjaxResult;
import cn.zhuama.basic.util.Md5Utils;
import cn.zhuama.basic.util.StrUtils;
import cn.zhuama.org.domain.Logininfo;
import cn.zhuama.org.domain.User;
import cn.zhuama.org.mapper.LogininfoMapper;
import cn.zhuama.org.mapper.UserMapper;
import cn.zhuama.org.service.IUserService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * 业务实现类：
 */
@Service
@Transactional
public class UserServiceImpl extends BaseServiceImpl<User> implements IUserService {
    @Autowired
    RedisTemplate redisTemplate;

    @Autowired
    UserMapper userMapper;

    @Autowired
    LogininfoMapper logininfoMapper;

    @Override
    public void register(User user)  {
        //1.参数检验(在crotroller层实现)
        //2.逻辑判断
        //3.业务实现
        //前端提供表格后 要进行密码加密
        user.setSalt(StrUtils.getRandomString(8));
        String newPassword = Md5Utils.encrypByMd5(user.getSalt() + user.getPassword());
        user.setPassword(newPassword);
        //判断验证码是否正确 (比较存在redis的验证码和用户输入的是否一致) 这里我尝试用user已有的属性 给他放进去
        // 后面可以考虑清除 或者换成默认头像
        //String test = (String) redisTemplate.opsForValue().get("randomCode");
        if(user.getHeadImg().equals(redisTemplate.opsForValue().get("randomCode"))){
            //正确的话 就正常进行注册 添加 给他点属性
            //对了 这里还得判断用户是否已经存在 c 这步忘了
            user.setState(1);
            //手机号当默认用户名
            user.setUsername(user.getPhone());
            //复制user到login里面
            Logininfo logininfo = new Logininfo();
            BeanUtils.copyProperties(user,logininfo);
            user.setLogininfo_id(logininfo.getId());
            logininfo.setType(1);
            logininfo.setDisable(true);
            logininfoMapper.save(logininfo);
            userMapper.save(user);
        }else {
            //这步抛出异常 为什么没接到
            throw new BusinessException("验证码错误 添加失败");

        }
    }

    @Override
    public void update(User T) {
        //修改对应的logininfo表
        Logininfo logininfo = new Logininfo();
        BeanUtils.copyProperties(T,logininfo);
        logininfoMapper.update(logininfo);
        //自己更新
        super.update(T);
    }
}
